package br.com.cfccultura.admin.model.vo;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import br.com.cfccultura.admin.model.enums.Periodo;

public class Turma extends ValueObject {
	
	private static final long serialVersionUID = 4796264864760694652L;
	
	private Integer codigo;
	private Integer codigoTaxi;
	private Periodo periodo;
	private Curso curso;
	private Sala sala;
	private Funcionario instrutor;
	private Date inicio;
	private Date termino;
	private List<CalendarioDia> calendario;
	private List<Matricula> matriculas = new ArrayList<Matricula>();
	
	public Turma() {}
	public Turma(Integer codigo) {
		this.codigo = codigo;
	}
	public Turma(Date inicio) {
		this.inicio = inicio;
	}
	
	public Integer getCodigo() {
		return codigo;
	}
	public void setCodigo(Integer codigo) {
		this.codigo = codigo;
	}
	public Periodo getPeriodo() {
		return periodo;
	}
	public void setPeriodo(Periodo periodo) {
		this.periodo = periodo;
	}
	public Curso getCurso() {
		return curso;
	}
	public void setCurso(Curso curso) {
		this.curso = curso;
	}
	public Sala getSala() {
		return sala;
	}
	public void setSala(Sala sala) {
		this.sala = sala;
	}
	public Funcionario getInstrutor() {
		return instrutor;
	}
	public void setInstrutor(Funcionario instrutor) {
		this.instrutor = instrutor;
	}
	public Date getInicio() {
		return inicio;
	}
	public void setInicio(Date inicio) {
		this.inicio = inicio;
	}
	public Date getTermino() {
		return termino;
	}
	public void setTermino(Date termino) {
		this.termino = termino;
	}
	
	public List<CalendarioDia> getCalendario() {
		return calendario;
	}
	public void setCalendario(List<CalendarioDia> calendario) {
		this.calendario = calendario;
	}
	
	public List<Matricula> getMatriculas() {
		return matriculas;
	}
	public void setMatriculas(List<Matricula> matriculas) {
		this.matriculas = matriculas;
	}
	
	public Integer getCodigoTaxi() {
		return codigoTaxi;
	}
	public void setCodigoTaxi(Integer codigoTaxi) {
		this.codigoTaxi = codigoTaxi;
	}
	
	public Integer getVagas() {
		return getSala().getQtdeAluno() - getMatriculas().size();
	}
	
	public Boolean getEncerrado() {
		Calendar c1 = Calendar.getInstance();
		c1.setTime(new Date());
		c1.set(Calendar.HOUR_OF_DAY, 0);
		c1.set(Calendar.MINUTE, 0);
		c1.set(Calendar.SECOND, 0);
		c1.set(Calendar.MILLISECOND, 0);
		
		Calendar c2 = Calendar.getInstance();
		c2.setTime(getTermino());
		c2.set(Calendar.HOUR_OF_DAY, 0);
		c2.set(Calendar.MINUTE, 0);
		c2.set(Calendar.SECOND, 0);
		c2.set(Calendar.MILLISECOND, 0);
		
		if(c1.getTimeInMillis() >= c2.getTimeInMillis())
			return true;
		return false;
	}
	
	public Boolean getUltimoDia() {
		Calendar c1 = Calendar.getInstance();
		c1.setTime(new Date());
		c1.set(Calendar.HOUR_OF_DAY, 0);
		c1.set(Calendar.MINUTE, 0);
		c1.set(Calendar.SECOND, 0);
		c1.set(Calendar.MILLISECOND, 0);
		
		Calendar c2 = Calendar.getInstance();
		c2.setTime(getTermino());
		c2.set(Calendar.HOUR_OF_DAY, 0);
		c2.set(Calendar.MINUTE, 0);
		c2.set(Calendar.SECOND, 0);
		c2.set(Calendar.MILLISECOND, 0);
		
		if(c1.getTimeInMillis() == c2.getTimeInMillis())
			return true;
		return false;
	}

}
